
import { createRouter , createWebHashHistory } from "vue-router";

//导入$axios封装
import $axios from "@/utils/request"; 
// 弹窗
import { ElMessage } from "element-plus";


    // 1.后台账号可以访问前后台所有页面   2.前台账号只能访问前台网页
    
    // 给路由设置两个属性:
    // requireAuth属性:(所有路由)控制后台账号的访问权限(true:该路由必须是后台账号访问;false:该路由前后台账号皆可访问)
    // isCheckLogin属性:主要针对前台网页:前台账号的访问权限(true:该路由只能前台账号访问:false:该路由不需要登录可直接访问)


const routes=[
    {
        path:'/',
        redirect:'/home/login'  //当直接访问官网域本地域名时默认重定向到前台首页
    },
    // 前台网站:进入默认访问首页
    {
        path:'/home',
        meta:{requireAuth:false},  //前台商城所有页面皆可用任何账号访问
        // 子路由
        children:[
            // 设置子路由首页组件的访问地址为空，相当于当访问/home的时候，也会默认访问到该组件页面
            {path:'',name:'HomeIndex',component:()=>import('@/views/home/HomeIndex.vue'),meta:{title:'在线商城首页',isCheckLogin:false}},
            {path:'login',name:'HomeLogin',component:()=>import('@/views/home/HomeLogin.vue'),meta:{title:'会员登录',isCheckLogin:false}},
            {path:'cart',name:'HomeCart',component:()=>import('@/views/home/HomeCart.vue'),meta:{title:'会员购物车',isCheckLogin:true}},
        ]
    },

    // 后台管理系统:进入默认访问登录页
    {
        path:'/admin',
        children:[
            // 设置空路由给登录组件
            {path:'',name:'AdminLogin', component:()=>import('@/views/admin/AdminLogin.vue'),meta:{title:'后台系统登录页',requireAuth:false}},
            {path:'index',name:'HomeCart',component:()=>import('@/views/admin/AdminIndex.vue'),meta:{title:'后台系统首页',requireAuth:false},
            children:[
                {path:'uselist',name:'UserList',component:()=>import('@/components/home/UserList.vue'),meta:{title:'用户管理'}},
                {path:'person',name:'AdminPersonCom',component:()=>import('@/components/admin/AdminPersonCom.vue'),meta:{title:'个人信息',requireAuth:false}},
                {path:'listpor',name:'ListProducts',component:()=>import('@/components/home/ListProducts.vue'),meta:{title:'商品列表',requireAuth:false}},
                {path:'product',name:'ProductAdd',component:()=>import('@/components/home/ProductAdd.vue'),meta:{title:'商品管理',requireAuth:false}},
                {path:'CarouselManagement',name:'CarouselManagement',component:()=>import('@/components/home/CarouselManagement.vue'),meta:{title:'轮播图管理',requireAuth:false}},
                {path:'OrderManagement',name:'OrderManagement',component:()=>import('@/components/home/OrderManagement.vue'),meta:{title:'订单管理',requireAuth:false}}
            ]
        },
        ]
    }
];

const router=createRouter({
    routes,
    history:createWebHashHistory()
})
// 设置全局前置路由守卫(能获取登录者的身份===>isCheckLogin:true/requireAuth:true:没有获取到登录者的身份===>isCheckLogin:false)
router.beforeEach((to,from,next)=>{
    // 接受身份数据
    let role;
    // 判断即将前往的目录路由是否需要验证访问权限:如果需要验证则发起角色访问请求:如果不需要,只需要判断是否需要登录前台账号
    if(to.meta.requireAuth===true){
        // 需要验证当前使用者的访问权限
        // 向后端发起请求当前使用者角色的数据
        $axios.post('/role').then((res)=>{
            // 判断状态是否为200===>请求成功
            if(res.code==='200'){
                // 获取到了使用者身份
                role=res.data;
                // 判断当前身份是否是"admin后台管理员",如果是则说明已登录后台账号且能访问后台首页
                switch(role){
                    case 'admin':
                // 有足够的权限访问后台页面
                next();
                        break;
                    case 'user':
                    // 权限不足
                    ElMessage.error('您的权限不足,请前往商城登录,祝您购物愉快!');
                    next('/home/login');
                        break;
                }
            }else{
                // 没有获取到身份
                ElMessage.error('您还不是我们的会员,请注册!');
                next('/home/login');
            }
        }).catch((err)=>console.log(err))
    }else{
        // 不需要权限限制,只要是个账号都能访问到商城
        // 只需要做一个判断,当前路由是否需要登录后才能访问
        if(to.meta.isCheckLogin===true){
            // 会员缓存提取数据
            let user= localStorage.getItem('user');
            // 没有数据
            if(!user){
                // 强制前往前台登录页
                next('/home/login')
            }else{
                next();
            }
        }else{
            // 不用登录直接走人
            next();
        }
    }
})

export default router;